package com.twj.tools.poi;

import org.jodconverter.core.DocumentConverter;
import org.jodconverter.core.office.OfficeException;
import org.jodconverter.local.LocalConverter;
import org.jodconverter.local.office.LocalOfficeManager;

import java.io.File;
import java.util.HashMap;
import java.util.Map;




import com.sun.star.beans.PropertyValue;
import com.sun.star.beans.XPropertySet;
import com.sun.star.document.UpdateDocMode;
import com.sun.star.frame.XComponentLoader;
import com.sun.star.frame.XController;
import com.sun.star.frame.XStorable;
import com.sun.star.lang.XComponent;
import com.sun.star.text.XTextDocument;
import com.sun.star.uno.UnoRuntime;
import com.sun.star.view.XViewSettingsSupplier;

/**
 * @author 作者: tianwenju
 * @version 1.0
 * @project 金税三期工程核心征管及应用总集成项目
 * @package com.twj.tools.poi
 * @file T4.java 创建时间:2025年08月06日 11:39
 * @title 标题（要求能简洁地表达出类的功能和职责）
 * @description 描述（简要描述类的职责、实现方式、使用注意事项等）
 * @copyright Copyright (c) 2020 中国软件与技术服务股份有限公司
 * @company 中国软件与技术服务股份有限公司
 * @module 模块: 模块名称
 * @reviewer 审核人:
 * @history 修订历史（历次修订内容、修订人、修订时间等）
 */
public class T4 {
    public static void main(String[] args) {
        String docFilePath = "D:\\test\\gygy\\0723.doc";
        String pdfFilePath = "D:\\test\\gygy\\0723.pdf";
        String docFilePath1 = "D:\\test\\report\\report.docx";
        String pdfFilePath1 = "D:\\test\\report\\report.pdf";

//        docFilePath1 = "C:\\Users\\t1318\\Desktop\\税务\\供要管用\\222.doc";
//        pdfFilePath1 = "C:\\Users\\t1318\\Desktop\\税务\\供要管用\\222.pdf";
//        docFilePath1 = "D:\\test\\template-ryjl-1.docx";
//        pdfFilePath1 = "D:\\test\\template-ryjl-1.pdf";

//        docFilePath1 = "D:\\test\\template-1.docx";
//        pdfFilePath1 = "D:\\test\\template-1.pdf";

//        docFilePath1 = "D:\\test\\gygy\\系统设计说明书编写规范.doc";
//        pdfFilePath1 = "D:\\test\\gygy\\系统设计说明书编写规范.pdf";
        docFilePath1 = "C:\\Users\\t1318\\Desktop\\税务\\供要管用\\222.doc";
        pdfFilePath1 = "C:\\Users\\t1318\\Desktop\\税务\\供要管用\\222.pdf";


        try {
            long startTime = System.currentTimeMillis();
            convertDoc2Pdf(docFilePath1, pdfFilePath1);
//            convertDocInTwoSteps(docFilePath1, pdfFilePath1);
//            convertDocxToPdfPreserveFormat(docFilePath1, pdfFilePath1);
            long endTime = System.currentTimeMillis();

            System.out.println("转换完成！耗时: " + (endTime - startTime) + " ms");

            File pdfFile = new File(pdfFilePath1);
            if (pdfFile.exists()) {
                System.out.println("PDF文件大小: " + pdfFile.length() + " bytes");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }


    }


    public static void convertDoc2Pdf(String docFilePath, String pdfFilePath) throws OfficeException {
        LocalOfficeManager officeManager = LocalOfficeManager.builder()
                .install() // 自动查找Office安装路径
                .build();

        try {
            officeManager.start();

            // 设置视图属性 - 关闭修订显示
            Map<String, Object> viewSettings = new HashMap<>();
            viewSettings.put("ShowChanges", false);
            viewSettings.put("ShowInlineChanges", false);
            viewSettings.put("ShowChangesInMargin", false);
            viewSettings.put("ShowAnnotations", false);

            // 设置加载属性 - 接受修订
            Map<String, Object> loadProperties = new HashMap<>();
            loadProperties.put("UpdateDocMode", 1); // 接受修订
            loadProperties.put("Hidden", true);
//            loadProperties.put("UpdateDocMode", "ACCEPT"); // ✅ 核心：接受所有修订

            loadProperties.putAll(viewSettings);

            // 创建转换器
            DocumentConverter converter = LocalConverter.builder()
                    .officeManager(officeManager)
                    .loadProperties(loadProperties)
//                    .customViewSettings(viewSettings) // 应用视图设置
                    .build();

            // 执行转换
            converter.convert(new File(docFilePath))
                    .to(new File(pdfFilePath))
                    .execute();

        } finally {
            officeManager.stop();
        }
    }






}
